package com.yj.learn.config;

import org.springframework.boot.bind.RelaxedPropertyResolver;
import org.springframework.context.EnvironmentAware;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;

@Configuration
public class SwaggerConfiguration extends WebMvcConfigurerAdapter implements EnvironmentAware {
  private String basePackage = "com.yj.learn";
  private String creatName = "yj";
  private String serviceName = "yj";
  private RelaxedPropertyResolver propertyResolver;
  private String description = "yj";
  /**
   * 这个地方要重新注入一下资源文件，不然不会注入资源的，也没有注入requestHandlerMappping,相当于xml配置的
   *  <!--swagger资源配置-->
   *  <mvc:resources location="classpath:/META-INF/resources/" mapping="swagger-ui.html"/>
   *  <mvc:resources location="classpath:/META-INF/resources/webjars/" mapping="/webjars/**"/>
   *  不知道为什么，这也是spring boot的一个缺点（菜鸟觉得的）
   * @param registry
   */
  @Override
  public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry.addResourceHandler("swagger-ui.html")
      .addResourceLocations("classpath:/META-INF/resources/");
    registry.addResourceHandler("/webjars*")
      .addResourceLocations("classpath:/META-INF/resources/webjars/");
  }



  @Bean
  public Docket createRestApi() {
      return new Docket(DocumentationType.SWAGGER_2)
              .pathMapping("/")
              .select()
              .apis(RequestHandlerSelectors.basePackage("com.yj.learn"))
              .paths(PathSelectors.any())
              .build().apiInfo(new ApiInfoBuilder()
                      .title("SpringBootSwagger")
                      .description("SpringBootSwagger，info......")
                      .version("9.0")
                      .contact(new Contact("aaaa","blog.csdn.net","aaa@gmail.com"))
                      .license("The Apache License")
                      .licenseUrl("http://www.baidu.com")
                      .build());
  }

  private ApiInfo apiInfo() {
    return new ApiInfoBuilder()
      .title(this.serviceName+" Restful APIs")
      .description(this.description)
      .contact(this.creatName).version("1.0").build();
  }

  @Override
  public void setEnvironment(Environment environment) {
    this.propertyResolver = new RelaxedPropertyResolver(environment, null);
    this.basePackage = propertyResolver.getProperty("swagger.basepackage");
    this.creatName = propertyResolver.getProperty("swagger.service.developer");
    this.serviceName = propertyResolver.getProperty("swagger.service.name");
    this.description = propertyResolver.getProperty("swagger.service.description");
  }
}